#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__author__ = "Administrator"
__name__="trans_client"
__date__="2016/7/8"
__time__="9:57"
"""
import socket
import sys
import os
ip_port = ('127.0.0.1',9999)
sk = socket.socket()
sk.connect(ip_port)

# container = {'key':'','data':''}
while True:
    input = raw_input('path:')  # 等待输入会阻塞
    cmd,path = input.split('|') # 定义字符串分隔规则 cmd: put ,get ... path:路径
    file_name = os.path.basename(path)  # 获取文件名，服务端需要创建相同文件名的文件。
    file_size = os.stat(path).st_size   # 获取文件大小，发送和接收要先放到缓冲区，缓冲区大小一般为8K即8096字节。所以大文件要分批发送。
    '''
    假如客户端分10次发送一个大文件到服务器端，服务器端接收方式有两种，一是接收一部分便写入到磁盘中（优选），二是全部接收完在一次性写入硬盘中，假如文件有4G，服务器要先把文件写入内存，可能会把内存撑爆。
    '''
    sk.send(cmd+"|"+file_name+'|'+str(file_size))   # 发送格式--- 发送文件(命令+文件名+文件大小)给服务器
    send_size = 0
    f = file(path,'rb') # 客户端读取文件
    Flag = True # 读文件 -- 发文件
    while Flag:
        if  send_size +1024 > file_size:    # 已经发送的数据 +1024 大于file_size 说明是最后一次发送
            data = f.read(file_size-send_size)  # 剩余数据大小
            Flag = False    # 发送最后一次后，停止发送。
        else:
            data = f.read(1024) # 每次发送1024字节==1KB
            send_size+=1024
        sk.send(data)
    f.close()
sk.close()


'''
eg:
path:put|E:\rsa\id_rsa
path:put|E:\WindowsServer2012 SQLServer2012故障转移群集.pdf
'''

